01 芯片介绍
up的视频讲解从一颗芯片出发,认识处理器、存储器和外设,再理解程序如何在它们之间运行。
1 芯片里有什么
微控制器把一个小型计算机所需的主要部件集成在一颗芯片中。课程使用的 STM32F103C8T6,可以先按三个部分理解:负责执行程序的内核、存放程序与数据的存储器,以及连接外部设备的外设。

图中用系列框图说明连接关系,包含其他型号的外设。课程所用 C8T6 的具体资源按下表理解,不能把框图里所有外设都视为本芯片具备。
| 部分 | 在程序中承担的工作 |
|---|---|
| Cortex-M3 内核 | 读取指令,完成计算,控制程序执行顺序 |
| 64 KB Flash | 保存下载的程序和常量,断电后仍然保留 |
| 20 KB SRAM | 保存运行过程中需要读写的数据,断电后不保留 |
| GPIO、定时器、通信等外设 | 处理引脚电平、计时、数据收发等具体工作 |
CPU 可以进一步理解为控制与运算两部分:控制单元决定下一步做什么,运算单元完成相应的计算。外设则把重复的硬件工作分担出去,不必让 CPU 逐个电平地处理所有事情。
2 指令与数据怎样连接
两种架构的区别
冯·诺依曼架构让指令与数据共用存储空间和通路;哈佛架构为它们设置独立的存储空间和通路。前者强调统一访问,后者方便同时取指令和访问数据。

STM32 使用的 Cortex-M3 采用改良的哈佛架构。程序指令可以放在 Flash 中,一些只读常量也可以放在那里;运行中的变量主要使用 SRAM。理解这一点,就能把代码里的常量、变量与实际存储空间联系起来。
总线把各部分连接起来

总线是内部传输地址与数据的通路。总线矩阵连接多个访问者和目标;AHB 与 APB 则把不同外设组织到相应的总线上。后面配置 GPIO、定时器时所说的“开启外设时钟”,就会与这些连接对应起来。
3 程序怎样进入芯片并启动
下载:把程序写入 Flash
课程通过 ST-Link 连接开发板的 SWD 接口。SWDIO 负责数据,SWCLK 负责时钟;开发板上的 SWD、SWC 标识对应这两条信号。

启动:决定从哪里开始运行
芯片复位后,根据启动配置选择启动存储区域。正常运行课程程序时,从用户 Flash 启动;系统存储器中的引导程序则用于另一类下载流程。

程序运行时,程序计数器 PC 跟踪接下来执行的指令。顺序执行时向后推进,遇到跳转、函数调用或中断时,执行位置发生变化。
4 用地址访问存储器与外设
地址像一个编号:CPU 先给出地址,再读取或写入对应位置。32 位地址可以表达 2³² 个不同地址;在按字节寻址的空间中,对应 4 GB 的地址范围。地址范围并不等于芯片实际装有 4 GB 存储器。

程序指令、常量、变量,以及外设寄存器,都能在地址空间中找到相应的位置。后面调用库函数配置外设,本质上仍是对相关寄存器进行访问。